Déroulement de la séance
Introduction
Principes élémentaires de ggplot
Travail pratique guidé
Conclusion
Introduction
Pourquoi R ?
Reprendre un langage déjà utilisé
R est utile dans l’analyse et la visualisation
Possibilité de documenter clairement ce qui est fait
Manipulation et nettoyage de données (spatiales, temporelles, textuelles, numériques)
Analyses statistiques
Visualisation de données
Utilisés dans les sciences sociales (psycho notamment)
Pourquoi ggplot ?
Un package pour visualisations simples et avancées
Intégration dans le tidyverse
Nombreuses extensions et gestion fine des détails
R, erreurs, errances
Peu importe l’expérience, tout le monde fait des erreurs
La différence est la capacité à les résoudre vite et bien
Lire et décrypter le message d’erreur est un bon début !
Error in ggplot(): impossible de trouver la fonction "ggplot"
Error in srt(c(1, 2, 3)): impossible de trouver la fonction "srt"
install.packages (tidyverse)
Error in eval(expr, envir, enclos): objet 'tidyverse' introuvable
read.csv ("mon_jeu_de_donnees.csv" )
Error in file(file, "rt"): impossible d'ouvrir la connexion
R, erreurs, errances
# Charger la librairie pour ensuite accéder aux fonctions
library (ggplot2)
ggplot ()
# Vérifier et rectifier les fautes de frappe
str (c (1 ,2 ,3 ))
# Il faut préciser le nom du package à installer en tant que texte
install.packages ("tidyverse" )
# Vérifier le chemin d'accès
read.csv ("data/mon_jeu_de_donnees.csv" )
Si votre console affiche un + et non un > après avoir entré votre commande, c’est qu’un élément (), [], {}, "", '' n’a pas été fermé
S’approprier RStudio - Partie 1
Démarrez RStudio, créez un nouveau dossier et nouveau Rproj et ouvrez introduction_ggplot2.Rmd
Notez vos version de R (s’affiche au début | 4.2.x et +) et RStudio (Menu Aide > À propos | 2023.03.x)
Lisez et effectuez la partie 1. Introduction du RMarkdown
N’oubliez pas d’Appliquer les changements
Principes élémentaires de ggplot
Pour faire un graphique, il faut 3 éléments :
des données
des aesthetic mappings (correspondances esthétiques)
une couche (layer )
et également la librarie ggplot2
Les données
Maturités gymnasiales du secondaire II, issues de la Statistique des diplômes (SBA) de l’Office Fédéral de la Statistique (état avril 2022)
dmat <- readr:: read_csv ("data/matus.csv" )
head (dmat, n = 8 )
# A tibble: 8 × 122
canton h_2021 f_2021 langues_anciennes_2021 langue_moderne_2021
<chr> <dbl> <dbl> <dbl> <dbl>
1 Vaud 1101 1455 46 291
2 Valais 297 425 66 233
3 Genève 731 985 94 328
4 Berne 708 1058 10 269
5 Fribourg 361 533 28 273
6 Neuchâtel 214 312 6 60
7 Jura 60 86 2 33
8 Tessin 431 704 70 187
# ℹ 117 more variables: math_physique_2021 <dbl>, bio_chimie_2021 <dbl>,
# eco_droit_2021 <dbl>, philo_psycho_2021 <dbl>, arts_visuels_2021 <dbl>,
# musique_2021 <dbl>, autres_2021 <dbl>, h_2020 <dbl>, f_2020 <dbl>,
# langues_anciennes_2020 <dbl>, langue_moderne_2020 <dbl>,
# math_physique_2020 <dbl>, bio_chimie_2020 <dbl>, eco_droit_2020 <dbl>,
# philo_psycho_2020 <dbl>, arts_visuels_2020 <dbl>, musique_2020 <dbl>,
# autres_2020 <dbl>, h_2019 <dbl>, f_2019 <dbl>, …
matus_tot <- tidyr:: pivot_longer (dmat,
cols = matches ("^[h|f]" ),
names_to = c ("annee" ),
names_pattern = "_( \\ d{4})" ,
names_transform = list (annee = as.integer),
values_to = "nb_matus" ) |>
dplyr:: select (canton, annee, nb_matus) |>
dplyr:: group_by (canton, annee) |>
dplyr:: summarise (tot = sum (nb_matus))
head (matus_tot, n= 15 )
# A tibble: 15 × 3
# Groups: canton [2]
canton annee tot
<chr> <int> <dbl>
1 Berne 2011 2133
2 Berne 2012 1962
3 Berne 2013 1959
4 Berne 2014 1932
5 Berne 2015 1943
6 Berne 2016 1935
7 Berne 2017 1881
8 Berne 2018 1862
9 Berne 2019 1835
10 Berne 2020 1753
11 Berne 2021 1766
12 Fribourg 2011 892
13 Fribourg 2012 853
14 Fribourg 2013 826
15 Fribourg 2014 892
Pour faire un graphique, il faut 3 éléments :
Les correspondances esthétiques
Préciser quels éléments des données vont être montrés par quelles propriétés sur le graphique
Représenter les cantons par des couleurs différentes
Représenter le temps sur l’axe x
Représenter le nombre d’habitants par la taille
Les variables visuelles en cartographie
ggplot (data = matus_tot, aes (x = annee))
Pour faire un graphique, il faut 3 éléments :
des données ✔️
des correspondances esthétiques ✔️
ggplot (data = matus_tot, aes (x = annee, y = tot))
Les couches
Les couches décrivent comment représenter l’information
On peut ajouter une à plusieurs couches à un graphique
Elles sont généralement créées par les fonctions geom_
des données ✔️
des correspondances esthétiques ✔️
une couche ✔️
ggplot (data = matus_tot, aes (x = annee, y = tot)) +
geom_point ()
On peut rajouter des correspondances esthétiques si pertinent
ggplot (data = matus_tot, aes (x = annee, y = tot, color = canton)) +
geom_point ()
Les aes peuvent être définies globalement ou localement
ggplot (data = matus_tot) +
geom_point (aes (x = annee, y = tot, color = canton))
On peut définir des paramètres de géométrie directement
ggplot (data = matus_tot) +
geom_point (aes (x = annee, y = tot), size = 3 , color = "salmon" )
On peut ajouter des géométries facilement
ggplot (data = matus_tot, aes (x = annee, y = tot)) +
geom_point (aes (color = canton)) +
geom_line ()
Il y a des géométries individuelles et collectives
ggplot (data = matus_tot, aes (x = annee, y = tot, color = canton)) +
geom_point () +
geom_line (aes (group = canton))
Tester les geoms - Partie 2
Chargement des librairies et données
Expérimenter avec les geoms usuelles (points, lignes, barres/colonnes, histogrammes et boxplots)
Faire des réglages divers (échelles, couleurs, largeur de bande, etc.)
Mise en scène
Comme pour les cartes, il faut habiller les graphiques
Ajouter des informations qui permettent de le comprendre
Hiérarchiser et trier les éléments
Éléments qui peuvent être obligatoires ou facultatifs
Titre, axes, et légendes
On utilise généralement la fonction labs() qu’on ajoute au graphique
Dans la fonction, on donne le nom de l’élément qu’on souhaite et le texte à écrire.
labs(title = "Titre")
ggplot (matus_tot, aes (annee, tot, color = canton)) +
geom_point () +
geom_line (aes (group = canton)) +
labs (title = "Maturités gymnasiales obtenues" ,
subtitle = "Par canton et année" ,
x = "Année" ,
y = "Nombre de maturités" ,
color = NULL ,
caption = "Source: ©OFS (SBA), 2022" )
Thèmes (globaux)
Dans ggplot, les modifications qui ne touchent pas aux données se font dans les thèmes
Il existe plusieurs thèmes prédéfinis (fonctions theme_xxx())
ggplot (matus_tot, aes (annee, tot, color = canton)) +
geom_point () +
geom_line (aes (group = canton)) +
theme_classic ()
Thèmes (personnalisation)
Il est possible d’ajuster chaque élément individuellement avec la fonction theme()
Chaque élément est ajusté sous la forme theme(element.name = element_function())
Il y a quatre fonctions d’éléments (text , rectangle , line , blank )
ggplot (matus_tot, aes (annee, tot, color = canton)) +
geom_line (aes (group = canton)) +
labs (title = "Ceci est un titre" ) +
theme (plot.title = element_text (family = "Century Gothic" , size = 25 ),
panel.background = element_rect (fill = "yellow" ),
panel.grid.major = element_line (color = "black" ),
axis.title.x = element_blank ())
Habillage
Titres, axes et légendes
Thèmes complets
Personnalisation d’éléments
Changement de police
Complexifier
Jusqu’ici, possibilité de faire des graphiques simples
Le développement est incrémental, un graphique nécessite plusieurs essais avant d’être abouti
Gardez vos versions intermédiaires pour pouvoir y revenir
Petits multiples (facetting)
Avec ggplot, il y a deux fonctions pour obtenir des petits multiples
facet_grid(), multiples en fonction de 2 variables
facet_wrap(), multiples en fonction d’1 variable
Petits multiples (facetting )
Toujours selon le même principe, il faut définir un graphique de base
À la suite, on ajoute la fonction facet_() qu’on veut utiliser
À l’intérieur, on précise à l’aide d’un tilde (~ ), “en fonction de” quoi on souhaite réaliser les multiples.
facet_grid(annee ~ mois), où l’ordre est (lignes ~ colonnes)
facet_wrap()
ggplot (matus_branche_rel, aes (annee, pct_matu* 100 )) +
geom_line (aes (color = canton, group = canton)) +
facet_wrap (~ branche) +
scale_x_discrete (labels = c ("2011" ,"" , "" ,"" , "" , "16" ,"" ,"" ,"" ,"" , "21" ))
facet_grid()
ggplot (matus_branche_rel_selection, aes (annee, pct_matu* 100 )) +
geom_line (aes (color = canton, group = canton), linewidth = 0.8 ) +
facet_grid (canton ~ branche) +
scale_x_discrete (labels = c ("2011" ,"" , "" ,"" , "" , "16" ,"" ,"" ,"" ,"" , "21" )) +
theme (legend.position = "none" )
Mise en valeur (highlighting )
Il ne faut pas hésiter à faciliter la lecture du public cible en mettant en avant certains éléments
La mise en valeur doit être appropriée au but visé (comparer, montrer une tendance,etc.)
Quelles sont les grandes tendances pour le Tessin ?
Quelles sont les grandes tendances pour le Tessin ?
Quelles sont les grandes tendances pour le Tessin ?
Cartographie
À l’aide du package sf (simple features ), il est possible de faire des cartes avec ggplot
Il est possible d’utiliser geom_sf() sur des données spatiales (avec une colonne géométrie)
library (sf)
cantons <- st_read ("data/map/K4kant20220101gf_ch2007Poly.shp" , quiet = T)
lacs <- st_read ("data/map/k4seenyyyymmdd11_ch2007Poly.shp" , quiet = T)
ggplot () +
geom_sf (data = cantons, fill = "gray85" , color = "white" , linewidth = 0.5 ) +
geom_sf (data = lacs, fill = "darkGray" , color = "darkGray" , linewidth = 0.4 ) +
coord_sf (datum = NA ) +
labs (title = "Les cantons suisses" ,
caption = "© OFS, Themakart, 2023" ) +
theme (panel.background = element_blank ())
Exporter
Une fois le graphique terminé, il est possible de l’exporter
La fonction ggsave() permet d’exporter le dernier graphique visualisé ou un graphique enregistré dans une variable
Le nom du fichier déterminera l’extension (.svg, .png, etc.)
final <- ggplot (data = matus_tot) +
geom_point (aes (x = annee, y = tot, color = canton))
ggsave ("exemple_export.png" , plot = final)
Il est possible de préciser les dimensions (en inches ) avec les arguments width et height.
final <- ggplot (data = matus_tot) +
geom_point (aes (x = annee, y = tot, color = canton))
ggsave ("exemple_export.png" , plot = final, height = 3 , width = 5 )
Les graphiques dont on a l’habitude
Les graphiques qu’on peut produire
Des multiples différents
Conclusions
Un graphique, comme une carte, nécessite de la réflexion
Le travail est incrémental et commence par les données
ggplot permet de faire des graphiques simples et complexes selon la même logique